package com.louzhu.gulimall.sso.testclient.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

/**
 *
 */
@Controller
public class HelloController {
    /**
     * 无需登录就可访问
     *
     * @return
     */
    @ResponseBody
    @GetMapping(value = "/hello")
    public String hello() {
        return "hello";
    }

    /**
     * 登录认证后才能获取到数据
     * @param model
     * @param session
     * @param token 登录服务器端登录成功后返回的 登录标识（从登录服务器端成功登录后才会有）
     * @return
     */
    @GetMapping(value = "/employees")
    public String employees(Model model,
                            HttpSession session,
                            @RequestParam(value = "token", required = false) String token) {

        /*
        判断从录服务器端登录成功后返回的登录标识 token 是否存在
         */

        // 如果存在，则携带上token到登录服务器获取已登录的用户信息
        if (!StringUtils.isEmpty(token)) {
            RestTemplate restTemplate = new RestTemplate();
            // 发请求
            ResponseEntity<String> forEntity = restTemplate.getForEntity("http://localhost:9000/userinfo?token=" + token, String.class);
            // 从响应体中获取用户信息
            String body = forEntity.getBody();

            // 将登录成功的用户信息存入session
            session.setAttribute("loginUser", body);
        }

        /*
        从当前会话session中获取登录信息
         */
        Object loginUser = session.getAttribute("loginUser");

        if (loginUser == null) {
            // 没有登录的话，携带上当前 地址作为请求参数（用于登录后重定向回到当前），重定向到登录服务器进行登录
            return "redirect:" + "http://localhost:9000/login.html" + "?redirect_url=http://localhost:9001/employees";
        } else {
            // 已经登录就返回数据
            List<String> emps = new ArrayList<>();

            emps.add("张三");
            emps.add("李四");

            model.addAttribute("emps", emps);
            return "employees";
        }
    }

}
